Software developers often strive to tailor or "port" their applications to a variety of computing platforms to achieve a wider user base and increased product acceptance. However, system-dependent variables, such as microprocessor type and operating system, make porting a difficult task. Moreover, ported applications must thereafter be supported in each computing platform-specific environment. Consequently, the overall product cost, including porting and support, must be weighed against the potential gains in the marketplace.
An increasingly preferred alternative to porting customized applications is to write software in a platform-independent programming language, such as the Java.TM. programming language (hereinafter "Java"). Java.TM. is a trademark of Sun Microsystems, Inc., Mountain View, Calif. Writing in Java enables developers to create programs for diverse computing platforms independent of the particular microprocessors or operating systems used. Applications written in Java (hereinafter "Java programs") can be utilized over a wide spectrum of computers, both as applications embedded within web pages, called "applets," and as applications which run stand-alone or over a distributed environment.
The Java program code is first "compiled" into platform-independent bytecode. During runtime, the bytecode is "executed." Presently, two forms of interpreters for executing bytecode are used. The first form of interpreter is a software interpreter for executing bytecode on a line-by-line basis, such as the Java virtual machine (JVM) described in T. Lindholm & F. Yellin, "The Java Virtual Machine Specification," Addison-Wesley (1997), the disclosure of which is incorporated herein by reference. The JVM is an application program functionally interposed as a layer between the Java program and the native operating system and hardware. However, the JVM results in a significant performance degradation, potentially causing a slow-down of up to fifty times that of a comparable C or C++ programming language application.
The other form of bytecode interpreter is a native instruction translator, such as the Just-In-Time (JIT) compiler described in F. Yellin, "The JIT Compiler API," ftp://ftpjavasoft.com/docs/jit_interface.pdf, Oct. 4, 1996, the disclosure of which is incorporated herein by reference. The JIT compiler translates the bytecode into native machine instructions to achieve near native code execution speeds. However, a one time computation cost is incurred each time an application is run, thereby causing overall slower execution than applications compiled directly into native machine instructions.
Therefore, there is a need for a system and method for accelerating execution of platform-independent code which avoids the slower performance of a JVM and JIT compiler. Preferably, such a system and method would operate concurrently and independently of the main processor using a co-processor.